Introduction
The Royal Society for the Prevention of Cruelty to Animals, or RSPCA,
is Australia’s oldest, largest and most trusted animal welfare
organisation. In the year of 2020 alone they received over 1 million
animals into their shelters and adoption centres across the country.
Through hard work and concerted efforts, they have managed to increase
their rates of adoption and reclaiming, improving the outcomes for
hundreds of thousands of cats and dogs, who have either been reunited
with their owners or have found a new home.
In this presentation, I will answer questions that the RSPCA has
asked for the purposes of gaining more insight into the animals,
especially the cats and dogs, of Australia. This will help them make
more informed decisions in the future through the power of data, with
the goal of further increasing their rates of adoption and reclaiming. I
believe my analysis will help the RSPCA move forward in their goal and
improve animal welfare across Australia as a whole.
The Data
For this project, I was given three sources of data. The first is
from the open RSPCA database and covers Australia as a whole, divided
into regions. It looks at the outcomes for cats, dogs and other animals
the RSPCA has received into its care (i.e, whether they were rehomed,
euthanised, still in stock and so on), with data spanning from 1999 to
2018. The data is from a trusted source and is of high quality.
Here is a map of Australian states for reference: 
The next two sources I was given concern data specific to Townsville
and Brisbane, two large Australian cities.
Townsville is a city on the north-eastern coast of Queensland,
Australia. With a population of 180,000, it is the largest settlement in
North Queensland; it is unofficially considered the capital of North
Queensland.
Brisbane is the official capital of Queensland, and is about 1000km
South East of Townsville, in the centre of South East Queensland. It’s
population is about 2.6 million. Both datasets consists of data gathered
by their respective councils, and concern the volume and type of animal
complaints received overtime. This is further broken by suburb. Both
these datasets come from local councils and are trusted sources. Here’s
another map showing the location of both of these cities:
Business Questions
Here are the business questions I have been tasked with
investigating:
Is there are a trend in injuries By Region, and is there different
peaks of times of year per region?
Analysis on the types of animals that are injured, this also by
Region – is there a species that is more liable to injury in certain
regions?
What is the outcome? Does this differ by region?
Total call volume for complaint calls: How has this trended over
time? Is there a particular animal being called about the most? Do
particular suburbs have different type of complaint calls? Do they call
about different animals?
Business Intelligence – using the insights you have found, can you
predict how this might look for the upcoming year?
Analysis
First, I looked at the total call volume for complaint calls, to see
how this trended over time.


As you can see looking at these graphs, there is a noticeable
seasonality. This can clearly be seen in the Townsville graph, with
calls peaking around July/August, which is winter for Australia. For
Brisbane, which is broken down by quarter rather than month, there does
appear to be seasonality but it is less pronounced and we do not have
enough data to say this definitively.
So there is evidence of seasonality, but I was also interested to
investigate the average overtime in general. Here is some graphs which
show this:


With these graphs, we can see more clearly the general trend,
ignoring seasonality. For Townsville, there is a steady increase up to
2017 and then a steady decline, to a similar place to where the number
of calls started.
For Brisbane, we can see a more clear trend upward over time, though
there is only 4 years of data. This means any conclusions to be drawn
from this should be taken with a grain of salt.
Next, I looked at which animals were being called about the most.
Again, I looked at both cities, and this time the conclusion was much
more clear.


For Townsville, dogs are responsible for 10x the amount of calls as
cats!
As for Brisbane, cats account for 35% of the calls that concern dogs.
In fact, dogs account for half of all calls!
One interesting point is that the numbers for foxes are quite high
for a wild animal. This is something that needs further investigation to
learn more about.
So, we can see quite clearly that dogs account for the majority of
the calls, and overshadow cats in second place by a large margin.
Now we will look at the data broken down by suburb and complaint
type. This proved a little more difficult than one might first think.
Brisbane has 192 suburbs, while Townsville has 85. I decided to first
focus on the Townsville data, and distill the suburbs down to a more
reasonable number. I wanted to look at suburbs with a similar amount of
complaint calls. I focused on those with less than 500 and more than 100
calls. I decided that any suburb with less than 100 calls would be such
a small number my percentages would be skewed, and no valid conclusions
could be drawn.

So, here I have shown the relative percentages of complaint types for
the suburbs. The data has been scaled, so that a suburb with a higher
count doesn’t skew the data, and we can see proportions.
One thing to note here, is the vast variation in tolerance for noise.
Most categories are consistent except this one. Cluden for example has a
small percentage of noise complaints, while Bohle Plains has a huge
percentage. This requires more investigation to figure out the root
cause.
Looking at the same but in a different way, we get:

This graph shows the same thing as before but with counts rather than
proportions. It allows us to see things in a different way. For example,
we can see that Hyde Park has a disproportionate amount of private
impounds, while Bohle plains has more noise complaints. This is
consistent with the previous graph that showed us proportions, so we can
be assured that our analysis is accurate
Looking at another subset of suburbs, this time those with total
calls between 500 and 4000, we get this:
`summarise()` has grouped output by 'suburb'. You can override using the `.groups` argument.

What sticks out to me in these busier suburbs, is the variability in
private impounds. Aitkenvale, Thuringowa Central and Douglas stand out
as being proportionally very high in number of private impounds. More
investigation is needed to find out the cause of this.
Now let’s look at things broken down by type of animal, rather than
complaint type. Looking at the original set of suburbs, we get this:

Most suburbs have pretty much the same ratios of cats to dogs, except
for Townsville City. This has close to 50:50 ratio, which is
unprecedented for this data, and not seen in any other Townsville suburb
(I checked even the other groups). This is the only suburb where this is
the case. This could potentially indicate a large number of stray cats,
but more investigation is needed to see why this is the case.
LS0tCnRpdGxlOiAiUHJlc2VudGF0aW9uIFNjcmlwdCIKb3V0cHV0OiBodG1sX25vdGVib29rCi0tLQoKIyMjIEludHJvZHVjdGlvbgoKVGhlIFJveWFsIFNvY2lldHkgZm9yIHRoZSBQcmV2ZW50aW9uIG9mIENydWVsdHkgdG8gQW5pbWFscywgb3IgUlNQQ0EsIGlzIEF1c3RyYWxpYSdzIG9sZGVzdCwgbGFyZ2VzdCBhbmQgbW9zdCB0cnVzdGVkIGFuaW1hbCB3ZWxmYXJlIG9yZ2FuaXNhdGlvbi4gSW4gdGhlIHllYXIgb2YgMjAyMCBhbG9uZSB0aGV5IHJlY2VpdmVkIG92ZXIgMSBtaWxsaW9uIGFuaW1hbHMgaW50byB0aGVpciBzaGVsdGVycyBhbmQgYWRvcHRpb24gY2VudHJlcyBhY3Jvc3MgdGhlIGNvdW50cnkuIFRocm91Z2ggaGFyZCB3b3JrIGFuZCBjb25jZXJ0ZWQgZWZmb3J0cywgdGhleSBoYXZlIG1hbmFnZWQgdG8gaW5jcmVhc2UgdGhlaXIgcmF0ZXMgb2YgYWRvcHRpb24gYW5kIHJlY2xhaW1pbmcsIGltcHJvdmluZyB0aGUgb3V0Y29tZXMgZm9yIGh1bmRyZWRzIG9mIHRob3VzYW5kcyBvZiBjYXRzIGFuZCBkb2dzLCB3aG8gaGF2ZSBlaXRoZXIgYmVlbiByZXVuaXRlZCB3aXRoIHRoZWlyIG93bmVycyBvciBoYXZlIGZvdW5kIGEgbmV3IGhvbWUuCgpJbiB0aGlzIHByZXNlbnRhdGlvbiwgSSB3aWxsIGFuc3dlciBxdWVzdGlvbnMgdGhhdCB0aGUgUlNQQ0EgaGFzIGFza2VkIGZvciB0aGUgcHVycG9zZXMgb2YgZ2FpbmluZyBtb3JlIGluc2lnaHQgaW50byB0aGUgYW5pbWFscywgZXNwZWNpYWxseSB0aGUgY2F0cyBhbmQgZG9ncywgb2YgQXVzdHJhbGlhLiBUaGlzIHdpbGwgaGVscCB0aGVtIG1ha2UgbW9yZSBpbmZvcm1lZCBkZWNpc2lvbnMgaW4gdGhlIGZ1dHVyZSB0aHJvdWdoIHRoZSBwb3dlciBvZiBkYXRhLCB3aXRoIHRoZSBnb2FsIG9mIGZ1cnRoZXIgaW5jcmVhc2luZyB0aGVpciByYXRlcyBvZiBhZG9wdGlvbiBhbmQgcmVjbGFpbWluZy4gSSBiZWxpZXZlIG15IGFuYWx5c2lzIHdpbGwgaGVscCB0aGUgUlNQQ0EgbW92ZSBmb3J3YXJkIGluIHRoZWlyIGdvYWwgYW5kIGltcHJvdmUgYW5pbWFsIHdlbGZhcmUgYWNyb3NzIEF1c3RyYWxpYSBhcyBhIHdob2xlLgoKCiMjIyBUaGUgRGF0YQoKRm9yIHRoaXMgcHJvamVjdCwgSSB3YXMgZ2l2ZW4gdGhyZWUgc291cmNlcyBvZiBkYXRhLiBUaGUgZmlyc3QgaXMgZnJvbSB0aGUgb3BlbiBSU1BDQSBkYXRhYmFzZSBhbmQgY292ZXJzIEF1c3RyYWxpYSBhcyBhIHdob2xlLCBkaXZpZGVkIGludG8gcmVnaW9ucy4gSXQgbG9va3MgYXQgdGhlIG91dGNvbWVzIGZvciBjYXRzLCBkb2dzIGFuZCBvdGhlciBhbmltYWxzIHRoZSBSU1BDQSBoYXMgcmVjZWl2ZWQgaW50byBpdHMgY2FyZSAoaS5lLCB3aGV0aGVyIHRoZXkgd2VyZSByZWhvbWVkLCBldXRoYW5pc2VkLCBzdGlsbCBpbiBzdG9jayBhbmQgc28gb24pLCB3aXRoIGRhdGEgc3Bhbm5pbmcgZnJvbSAxOTk5IHRvIDIwMTguIFRoZSBkYXRhIGlzIGZyb20gYSB0cnVzdGVkIHNvdXJjZSBhbmQgaXMgb2YgaGlnaCBxdWFsaXR5LgoKSGVyZSBpcyBhIG1hcCBvZiBBdXN0cmFsaWFuIHN0YXRlcyBmb3IgcmVmZXJlbmNlOgohW0F1c3RyYWxpYSBieSBTdGF0ZV0oZGF0YS9hdXN0cmFsaWFfYnlfc3RhdGUuanBlZykKCgpUaGUgbmV4dCB0d28gc291cmNlcyBJIHdhcyBnaXZlbiBjb25jZXJuIGRhdGEgc3BlY2lmaWMgdG8gVG93bnN2aWxsZSBhbmQgQnJpc2JhbmUsIHR3byBsYXJnZSBBdXN0cmFsaWFuIGNpdGllcy4KClRvd25zdmlsbGUgaXMgYSBjaXR5IG9uIHRoZSBub3J0aC1lYXN0ZXJuIGNvYXN0IG9mIFF1ZWVuc2xhbmQsIEF1c3RyYWxpYS4gV2l0aCBhIHBvcHVsYXRpb24gb2YgMTgwLDAwMCwgaXQgaXMgdGhlIGxhcmdlc3Qgc2V0dGxlbWVudCBpbiBOb3J0aCBRdWVlbnNsYW5kOyBpdCBpcyB1bm9mZmljaWFsbHkgY29uc2lkZXJlZCB0aGUgY2FwaXRhbCBvZiBOb3J0aCBRdWVlbnNsYW5kLiAKCkJyaXNiYW5lIGlzIHRoZSBvZmZpY2lhbCBjYXBpdGFsIG9mIFF1ZWVuc2xhbmQsIGFuZCBpcyBhYm91dCAxMDAwa20gU291dGggRWFzdCBvZiBUb3duc3ZpbGxlLCBpbiB0aGUgY2VudHJlIG9mIFNvdXRoIEVhc3QgUXVlZW5zbGFuZC4gSXQncyBwb3B1bGF0aW9uIGlzIGFib3V0IDIuNiBtaWxsaW9uLiAKQm90aCBkYXRhc2V0cyBjb25zaXN0cyBvZiBkYXRhIGdhdGhlcmVkIGJ5IHRoZWlyIHJlc3BlY3RpdmUgY291bmNpbHMsIGFuZCBjb25jZXJuIHRoZSB2b2x1bWUgYW5kIHR5cGUgb2YgYW5pbWFsIGNvbXBsYWludHMgcmVjZWl2ZWQgb3ZlcnRpbWUuIFRoaXMgaXMgZnVydGhlciBicm9rZW4gYnkgc3VidXJiLiBCb3RoIHRoZXNlIGRhdGFzZXRzIGNvbWUgZnJvbSBsb2NhbCBjb3VuY2lscyBhbmQgYXJlIHRydXN0ZWQgc291cmNlcy4gSGVyZSdzIGFub3RoZXIgbWFwIHNob3dpbmcgdGhlIGxvY2F0aW9uIG9mIGJvdGggb2YgdGhlc2UgY2l0aWVzOgoKIVtUb3duc3ZpbGxlIHRvIEJyaXNiYW5lXShkYXRhL3Rvd25zdmlsbGVfdG9fYnJpc2JhbmUucG5nKQoKIyMjIEJ1c2luZXNzIFF1ZXN0aW9ucwoKSGVyZSBhcmUgdGhlIGJ1c2luZXNzIHF1ZXN0aW9ucyBJIGhhdmUgYmVlbiB0YXNrZWQgd2l0aCBpbnZlc3RpZ2F0aW5nOgoKSXMgdGhlcmUgYXJlIGEgdHJlbmQgaW4gaW5qdXJpZXMgQnkgUmVnaW9uLCBhbmQgaXMgdGhlcmUgZGlmZmVyZW50IHBlYWtzIG9mIHRpbWVzIG9mIHllYXIgcGVyIHJlZ2lvbj8KCkFuYWx5c2lzIG9uIHRoZSB0eXBlcyBvZiBhbmltYWxzIHRoYXQgYXJlIGluanVyZWQsIHRoaXMgYWxzbyBieSBSZWdpb24g4oCTIGlzIHRoZXJlIGEgc3BlY2llcyB0aGF0IGlzIG1vcmUgbGlhYmxlIHRvIGluanVyeSBpbiBjZXJ0YWluIHJlZ2lvbnM/CgpXaGF0IGlzIHRoZSBvdXRjb21lPyBEb2VzIHRoaXMgZGlmZmVyIGJ5IHJlZ2lvbj8KClRvdGFsIGNhbGwgdm9sdW1lIGZvciBjb21wbGFpbnQgY2FsbHM6IEhvdyBoYXMgdGhpcyB0cmVuZGVkIG92ZXIgdGltZT8KSXMgdGhlcmUgYSBwYXJ0aWN1bGFyIGFuaW1hbCBiZWluZyBjYWxsZWQgYWJvdXQgdGhlIG1vc3Q/CkRvIHBhcnRpY3VsYXIgc3VidXJicyBoYXZlIGRpZmZlcmVudCB0eXBlIG9mIGNvbXBsYWludCBjYWxscz8gRG8gdGhleSBjYWxsIGFib3V0IGRpZmZlcmVudCBhbmltYWxzPwoKQnVzaW5lc3MgSW50ZWxsaWdlbmNlIOKAkyB1c2luZyB0aGUgaW5zaWdodHMgeW91IGhhdmUgZm91bmQsIGNhbiB5b3UgcHJlZGljdCBob3cgdGhpcyBtaWdodCBsb29rIGZvciB0aGUgdXBjb21pbmcgeWVhcj8KCgojIyMgQW5hbHlzaXMKCkZpcnN0LCBJIGxvb2tlZCBhdCB0aGUgdG90YWwgY2FsbCB2b2x1bWUgZm9yIGNvbXBsYWludCBjYWxscywgdG8gc2VlIGhvdyB0aGlzIHRyZW5kZWQgb3ZlciB0aW1lLiAKCmBgYHtyLCBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCBlcnJvcj1GQUxTRSwgZXZhbD1GQUxTRX0KbGlicmFyeSh0aWR5dmVyc2UpCmxpYnJhcnkoZ2d0aGVtZXMpCnNvdXJjZSgiY2xlYW5pbmdfc2NyaXB0LlIiKQpgYGAKCmBgYHtyLCBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCBlcnJvcj1GQUxTRSwgZXZhbD1UUlVFfQphbmltYWxfY29tcGxhaW50cyAlPiUgCiAgZ3JvdXBfYnkoZGF0ZV9yZWNlaXZlZCkgJT4lIAogIHN1bW1hcmlzZShjb3VudCA9IG4oKSkgJT4lIAogIGdncGxvdCgpICsKICBhZXMoeCA9IGRhdGVfcmVjZWl2ZWQsIHkgPSBjb3VudCkgKwogIGdlb21fbGluZShjb2wgPSAiYmx1ZSIpICsKICBzY2FsZV94X2RhdGUoZGF0ZV9icmVha3MgPSAiNiBtb250aHMiLCBkYXRlX2xhYmVscyA9ICIlYiAleSIpICsgCiAgbGFicyh0aXRsZSA9ICJUb3duc3ZpbGxlIENvbXBsYWludCBDYWxscyIsCiAgICAgICB4ID0gIlRpbWUiLAogICAgICAgeSA9ICJOdW1iZXIgb2YgQ2FsbHMiKSArCiAgdGhlbWVfZWNvbm9taXN0KCkgKwogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gNDUsIHZqdXN0ID0gMSwgZmFtaWx5ID0gIm1vbm8iLCBmYWNlID0gImJvbGQiLCBzaXplID0gNyksCiAgICAgICAgYXhpcy50aXRsZS55ID0gZWxlbWVudF90ZXh0KHZqdXN0ID0gMy4yKSwKICAgICAgICB0aXRsZSA9IGVsZW1lbnRfdGV4dChmYW1pbHkgPSAibW9ubyIsIGZhY2UgPSAiYm9sZCIpLAogICAgICAgIHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjQpKSArCiAgICAgICAgYW5ub3RhdGUoInJlY3QiLCB4bWluID0gYXMuRGF0ZSgiMjAxNC0wNi0wMSIpLCB4bWF4ID0gYXMuRGF0ZSgiMjAxNC0wOC0wMSIpLCB5bWluID0gLUluZiwgeW1heCA9IEluZiwgZmlsbCA9ICJncmF5NzAiLCBhbHBoYSA9IDAuMykgKwogICAgICAgIGFubm90YXRlKCJyZWN0IiwgeG1pbiA9IGFzLkRhdGUoIjIwMTUtMDYtMDEiKSwgeG1heCA9IGFzLkRhdGUoIjIwMTUtMDgtMDEiKSwgeW1pbiA9IC1JbmYsIHltYXggPSBJbmYsIGZpbGwgPSAiZ3JheTcwIiwgYWxwaGEgPSAwLjMpICsKICAgICAgICBhbm5vdGF0ZSgicmVjdCIsIHhtaW4gPSBhcy5EYXRlKCIyMDE2LTA2LTAxIiksIHhtYXggPSBhcy5EYXRlKCIyMDE2LTA4LTAxIiksIHltaW4gPSAtSW5mLCB5bWF4ID0gSW5mLCBmaWxsID0gImdyYXk3MCIsIGFscGhhID0gMC4zKSArCiAgICAgICAgYW5ub3RhdGUoInJlY3QiLCB4bWluID0gYXMuRGF0ZSgiMjAxNy0wNi0wMSIpLCB4bWF4ID0gYXMuRGF0ZSgiMjAxNy0wOC0wMSIpLCB5bWluID0gLUluZiwgeW1heCA9IEluZiwgZmlsbCA9ICJncmF5NzAiLCBhbHBoYSA9IDAuMykgKwogICAgICAgIGFubm90YXRlKCJyZWN0IiwgeG1pbiA9IGFzLkRhdGUoIjIwMTgtMDYtMDEiKSwgeG1heCA9IGFzLkRhdGUoIjIwMTgtMDgtMDEiKSwgeW1pbiA9IC1JbmYsIHltYXggPSBJbmYsIGZpbGwgPSAiZ3JheTcwIiwgYWxwaGEgPSAwLjMpICsKICAgICAgICBhbm5vdGF0ZSgicmVjdCIsIHhtaW4gPSBhcy5EYXRlKCIyMDE5LTA2LTAxIiksIHhtYXggPSBhcy5EYXRlKCIyMDE5LTA4LTAxIiksIHltaW4gPSAtSW5mLCB5bWF4ID0gSW5mLCBmaWxsID0gImdyYXk3MCIsIGFscGhhID0gMC4zKQoKCgpsYWJlbHMgPC0gYygiUTEgMjAxNiIsICJRMiAyMDE2IiwgIlEzIDIwMTYiLCAiUTQgMjAxNiIsICJRMSAyMDE3IiwgIlEyIDIwMTciLCAiUTMgMjAxNyIsICJRNCAyMDE3IiwgIlExIDIwMTgiLCAiUTIgMjAxOCIsICJRMyAyMDE4IiwgIlE0IDIwMTgiLCAiUTEgMjAxOSIsICJRMiAyMDE5IiwgIlEzIDIwMTkiLCAiUTQgMjAxOSIsICJRMSAyMDIwIiwgIlEyIDIwMjAiKQoKYnJpc2JhbmVfY29tcGxhaW50cyAlPiUgCiAgZ3JvdXBfYnkoZGF0ZSkgJT4lIAogIHN1bW1hcmlzZShjb3VudCA9IG4oKSkgJT4lIAogIGdncGxvdChhZXMoeCA9IGRhdGUsIHkgPSBjb3VudCkpICsKICBnZW9tX3BvaW50KCkgKwogIGdlb21fbGluZShjb2wgPSAiYmx1ZSIpICsKICBzY2FsZV94X2RhdGUoZGF0ZV9icmVha3MgPSAiMyBtb250aHMiLCBkYXRlX2xhYmVscyA9IGxhYmVscywgZXhwYW5kID0gYygwLDApKSArCiAgbGFicyh0aXRsZSA9ICJCcmlzYmFuZSBDb21wbGFpbnQgQ2FsbHMiLAogICAgICAgeCA9ICJUaW1lIiwKICAgICAgIHkgPSAiTnVtYmVyIG9mIENhbGxzIikgKwogIHRoZW1lX2Vjb25vbWlzdCgpICsKICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDUwLCB2anVzdCA9IDAuOCwgZmFtaWx5ID0gIm1vbm8iLCBmYWNlID0gImJvbGQiLCBzaXplID0gNyksCiAgICAgICAgYXhpcy50aXRsZS55ID0gZWxlbWVudF90ZXh0KHZqdXN0ID0gMy4yKSwKICAgICAgICB0aXRsZSA9IGVsZW1lbnRfdGV4dChmYW1pbHkgPSAibW9ubyIsIGZhY2UgPSAiYm9sZCIpLAogICAgICAgIHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjQpKQoKCmBgYAoKCkFzIHlvdSBjYW4gc2VlIGxvb2tpbmcgYXQgdGhlc2UgZ3JhcGhzLCB0aGVyZSBpcyBhIG5vdGljZWFibGUgc2Vhc29uYWxpdHkuIFRoaXMgY2FuIGNsZWFybHkgYmUgc2VlbiBpbiB0aGUgVG93bnN2aWxsZSBncmFwaCwgd2l0aCBjYWxscyBwZWFraW5nIGFyb3VuZCBKdWx5L0F1Z3VzdCwgd2hpY2ggaXMgd2ludGVyIGZvciBBdXN0cmFsaWEuIEZvciBCcmlzYmFuZSwgd2hpY2ggaXMgYnJva2VuIGRvd24gYnkgcXVhcnRlciByYXRoZXIgdGhhbiBtb250aCwgdGhlcmUgZG9lcyBhcHBlYXIgdG8gYmUgc2Vhc29uYWxpdHkgYnV0IGl0IGlzIGxlc3MgcHJvbm91bmNlZCBhbmQgd2UgZG8gbm90IGhhdmUgZW5vdWdoIGRhdGEgdG8gc2F5IHRoaXMgZGVmaW5pdGl2ZWx5LgoKU28gdGhlcmUgaXMgZXZpZGVuY2Ugb2Ygc2Vhc29uYWxpdHksIGJ1dCBJIHdhcyBhbHNvIGludGVyZXN0ZWQgdG8gaW52ZXN0aWdhdGUgdGhlIGF2ZXJhZ2Ugb3ZlcnRpbWUgaW4gZ2VuZXJhbC4gSGVyZSBpcyBzb21lIGdyYXBocyB3aGljaCBzaG93IHRoaXM6CgpgYGB7ciwgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgZXJyb3I9RkFMU0UsIGV2YWw9VFJVRX0KYW5pbWFsX2NvbXBsYWludHMgJT4lIAogIGdyb3VwX2J5KGRhdGVfcmVjZWl2ZWQpICU+JSAKICBzdW1tYXJpc2UoY291bnQgPSBuKCkpICU+JSAKICBnZ3Bsb3QoYWVzKHggPSBkYXRlX3JlY2VpdmVkLCB5ID0gY291bnQpKSArCiAgZ2VvbV9zbW9vdGgoKSArCiAgZ2VvbV9wb2ludCgpICsKICBzY2FsZV94X2RhdGUoZGF0ZV9icmVha3MgPSAiMSB5ZWFyIiwgZGF0ZV9sYWJlbHMgPSAiMjAleSIpICsKICBsYWJzKHRpdGxlID0gIlRvd25zdmlsbGUgQ29tcGxhaW50IENhbGxzIiwKICAgICAgIHggPSAiVGltZSIsCiAgICAgICB5ID0gIk51bWJlciBvZiBDYWxscyIpICsKICB0aGVtZV9lY29ub21pc3QoKSArCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQodmp1c3QgPSAxLCBmYW1pbHkgPSAibW9ubyIsIGZhY2UgPSAiYm9sZCIpLAogICAgICAgIGF4aXMudGl0bGUueSA9IGVsZW1lbnRfdGV4dCh2anVzdCA9IDMuMiksCiAgICAgICAgdGl0bGUgPSBlbGVtZW50X3RleHQoZmFtaWx5ID0gIm1vbm8iLCBmYWNlID0gImJvbGQiKSwKICAgICAgICBwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC40KSkKYGBgCgoKYGBge3IsIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIGVycm9yPUZBTFNFLCBldmFsPVRSVUV9CmJyaXNiYW5lX2NvbXBsYWludHMgJT4lIAogIGdyb3VwX2J5KGRhdGUpICU+JSAKICBzdW1tYXJpc2UoY291bnQgPSBuKCkpICU+JSAKICBnZ3Bsb3QoYWVzKHggPSBkYXRlLCB5ID0gY291bnQpKSArCiAgZ2VvbV9wb2ludCgpICsKICBnZW9tX3Ntb290aCgpICsKICBzY2FsZV94X2RhdGUoZGF0ZV9icmVha3MgPSAiMSB5ZWFyIiwgZGF0ZV9sYWJlbHMgPSAiMjAleSIpICsKICBsYWJzKHRpdGxlID0gIkJyaXNiYW5lIENvbXBsYWludCBDYWxscyIsCiAgICAgICB4ID0gIlRpbWUiLAogICAgICAgeSA9ICJOdW1iZXIgb2YgQ2FsbHMiKSArCiAgdGhlbWVfZWNvbm9taXN0KCkgKwogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KHZqdXN0ID0gMSwgZmFtaWx5ID0gIm1vbm8iLCBmYWNlID0gImJvbGQiKSwKICAgICAgICBheGlzLnRpdGxlLnkgPSBlbGVtZW50X3RleHQodmp1c3QgPSAzLjIpLAogICAgICAgIHRpdGxlID0gZWxlbWVudF90ZXh0KGZhbWlseSA9ICJtb25vIiwgZmFjZSA9ICJib2xkIiksCiAgICAgICAgcGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNCkpCmBgYAoKV2l0aCB0aGVzZSBncmFwaHMsIHdlIGNhbiBzZWUgbW9yZSBjbGVhcmx5IHRoZSBnZW5lcmFsIHRyZW5kLCBpZ25vcmluZyBzZWFzb25hbGl0eS4gRm9yIFRvd25zdmlsbGUsIHRoZXJlIGlzIGEgc3RlYWR5IGluY3JlYXNlIHVwIHRvIDIwMTcgYW5kIHRoZW4gYSBzdGVhZHkgZGVjbGluZSwgdG8gYSBzaW1pbGFyIHBsYWNlIHRvIHdoZXJlIHRoZSBudW1iZXIgb2YgY2FsbHMgc3RhcnRlZC4KCkZvciBCcmlzYmFuZSwgd2UgY2FuIHNlZSBhIG1vcmUgY2xlYXIgdHJlbmQgdXB3YXJkIG92ZXIgdGltZSwgdGhvdWdoIHRoZXJlIGlzIG9ubHkgNCB5ZWFycyBvZiBkYXRhLiBUaGlzIG1lYW5zIGFueSBjb25jbHVzaW9ucyB0byBiZSBkcmF3biBmcm9tIHRoaXMgc2hvdWxkIGJlIHRha2VuIHdpdGggYSBncmFpbiBvZiBzYWx0LiAKCgpOZXh0LCBJIGxvb2tlZCBhdCB3aGljaCBhbmltYWxzIHdlcmUgYmVpbmcgY2FsbGVkIGFib3V0IHRoZSBtb3N0LiBBZ2FpbiwgSSBsb29rZWQgYXQgYm90aCBjaXRpZXMsIGFuZCB0aGlzIHRpbWUgdGhlIGNvbmNsdXNpb24gd2FzIG11Y2ggbW9yZSBjbGVhci4KCmBgYHtyLCBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCBlcnJvcj1GQUxTRSwgZXZhbD1UUlVFfQphbmltYWxfY29tcGxhaW50cyAlPiUgCiAgZ3JvdXBfYnkoYW5pbWFsX3R5cGUpICU+JSAKICBnZ3Bsb3QoYWVzKHggPSBhbmltYWxfdHlwZSkpICsKICBnZW9tX2Jhcihjb2wgPSAiYmx1ZSIsIGZpbGwgPSAiYmx1ZSIpICsKICBsYWJzKHRpdGxlID0gIlRvd25zdmlsbGUgQ29tcGxhaW50cyBieSBBbmltYWwiLAogICAgICAgeCA9ICJUeXBlIG9mIEFuaW1hbCIsCiAgICAgICB5ID0gIk51bWJlciBvZiBDb21wbGFpbnRzIikgKwogIHRoZW1lX2Vjb25vbWlzdCgpICsKICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dCh2anVzdCA9IDEsIGZhbWlseSA9ICJtb25vIiwgZmFjZSA9ICJib2xkIiksCiAgICAgICAgYXhpcy50aXRsZS55ID0gZWxlbWVudF90ZXh0KHZqdXN0ID0gMy4yKSwKICAgICAgICB0aXRsZSA9IGVsZW1lbnRfdGV4dChmYW1pbHkgPSAibW9ubyIsIGZhY2UgPSAiYm9sZCIpLAogICAgICAgIHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjQpKQoKYnJpc2JhbmVfY29tcGxhaW50cyAlPiUgCiAgZ3JvdXBfYnkodHlwZV9vZl9hbmltYWwpICU+JQogIGdncGxvdChhZXMoeCA9IHR5cGVfb2ZfYW5pbWFsKSkgKwogIGdlb21fYmFyKGNvbCA9ICJibHVlIiwgZmlsbCA9ICJibHVlIikgKwogIGxhYnModGl0bGUgPSAiQnJpc2JhbmUgQ29tcGxhaW50cyBieSBBbmltYWwiLAogICAgICAgeCA9ICJUeXBlIG9mIEFuaW1hbCIsCiAgICAgICB5ID0gIk51bWJlciBvZiBDb21wbGFpbnRzIikgKwogIHRoZW1lX2Vjb25vbWlzdCgpICsKICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDQwLCB2anVzdCA9IDEsIGZhbWlseSA9ICJtb25vIiwgZmFjZSA9ICJib2xkIiwgc2l6ZSA9IDYpLAogICAgICAgIGF4aXMudGl0bGUueSA9IGVsZW1lbnRfdGV4dCh2anVzdCA9IDMuMiksCiAgICAgICAgdGl0bGUgPSBlbGVtZW50X3RleHQoZmFtaWx5ID0gIm1vbm8iLCBmYWNlID0gImJvbGQiKSwKICAgICAgICBwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC40KSkKYGBgCgoKRm9yIFRvd25zdmlsbGUsIGRvZ3MgYXJlIHJlc3BvbnNpYmxlIGZvciAxMHggdGhlIGFtb3VudCBvZiBjYWxscyBhcyBjYXRzISAKCkFzIGZvciBCcmlzYmFuZSwgY2F0cyBhY2NvdW50IGZvciAzNSUgb2YgdGhlIGNhbGxzIHRoYXQgY29uY2VybiBkb2dzLiBJbiBmYWN0LCBkb2dzIGFjY291bnQgZm9yIGhhbGYgb2YgYWxsIGNhbGxzIQoKT25lIGludGVyZXN0aW5nIHBvaW50IGlzIHRoYXQgdGhlIG51bWJlcnMgZm9yIGZveGVzIGFyZSBxdWl0ZSBoaWdoIGZvciBhIHdpbGQgYW5pbWFsLiBUaGlzIGlzIHNvbWV0aGluZyB0aGF0IG5lZWRzIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbiB0byBsZWFybiBtb3JlIGFib3V0LgoKU28sIHdlIGNhbiBzZWUgcXVpdGUgY2xlYXJseSB0aGF0IGRvZ3MgYWNjb3VudCBmb3IgdGhlIG1ham9yaXR5IG9mIHRoZSBjYWxscywgYW5kIG92ZXJzaGFkb3cgY2F0cyBpbiBzZWNvbmQgcGxhY2UgYnkgYSBsYXJnZSBtYXJnaW4uCgoKTm93IHdlIHdpbGwgbG9vayBhdCB0aGUgZGF0YSBicm9rZW4gZG93biBieSBzdWJ1cmIgYW5kIGNvbXBsYWludCB0eXBlLiBUaGlzIHByb3ZlZCBhIGxpdHRsZSBtb3JlIGRpZmZpY3VsdCB0aGFuIG9uZSBtaWdodCBmaXJzdCB0aGluay4gQnJpc2JhbmUgaGFzIDE5MiBzdWJ1cmJzLCB3aGlsZSBUb3duc3ZpbGxlIGhhcyA4NS4gSSBkZWNpZGVkIHRvIGZpcnN0IGZvY3VzIG9uIHRoZSBUb3duc3ZpbGxlIGRhdGEsIGFuZCBkaXN0aWxsIHRoZSBzdWJ1cmJzIGRvd24gdG8gYSBtb3JlIHJlYXNvbmFibGUgbnVtYmVyLiBJIHdhbnRlZCB0byBsb29rIGF0IHN1YnVyYnMgd2l0aCBhIHNpbWlsYXIgYW1vdW50IG9mIGNvbXBsYWludCBjYWxscy4gSSBmb2N1c2VkIG9uIHRob3NlIHdpdGggbGVzcyB0aGFuIDUwMCBhbmQgbW9yZSB0aGFuIDEwMCBjYWxscy4gSSBkZWNpZGVkIHRoYXQgYW55IHN1YnVyYiB3aXRoIGxlc3MgdGhhbiAxMDAgY2FsbHMgd291bGQgYmUgc3VjaCBhIHNtYWxsIG51bWJlciBteSBwZXJjZW50YWdlcyB3b3VsZCBiZSBza2V3ZWQsIGFuZCBubyB2YWxpZCBjb25jbHVzaW9ucyBjb3VsZCBiZSBkcmF3bi4gCgpgYGB7ciwgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgZXJyb3I9RkFMU0UsIGV2YWw9VFJVRX0KYW5pbWFsX2NvbXBsYWludHMgJT4lIAogIGdyb3VwX2J5KHN1YnVyYikgJT4lIAogIHN1bW1hcmlzZShjb3VudCA9IG4oKSwgY29tcGxhaW50X3R5cGUpICU+JSAKICBmaWx0ZXIoY291bnQgPCA1MDAgJiBjb3VudCA+IDEwMCkgJT4lIAogIGdncGxvdChhZXMoeCA9IHN1YnVyYiwgeSA9IGNvdW50LCBmaWxsID0gY29tcGxhaW50X3R5cGUpKSArCiAgZ2VvbV9jb2wocG9zaXRpb24gPSAiZmlsbCIsIHdpZHRoID0gMC45KSArCiAgY29vcmRfZmxpcCgpICsKICBsYWJzKHRpdGxlID0gIlRvd25zdmlsbGUgQ29tcGxhaW50IFR5cGVzIGJ5IFN1YnVyYiIsCiAgICAgICB4ID0gIlN1YnVyYiIsCiAgICAgICB5ID0gIlByb3BvcnRpb24gb2YgQ29tcGxhaW50IiwKICAgICAgIGNvbG9yID0gIkNvbXBsYWludCBUeXBlIiwKICAgICAgIHN1YnRpdGxlID0gIk5vLiBvZiBDYWxscyA8IDUwMCIpICsKICBzY2FsZV9maWxsX2Rpc2NyZXRlKG5hbWUgPSAiQ29tcGxhaW50IFR5cGUiKSArCiAgdGhlbWVfZWNvbm9taXN0KCkgKwogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KHZqdXN0ID0gMSwgZmFtaWx5ID0gIm1vbm8iLCBmYWNlID0gImJvbGQiLCBzaXplID0gMTApLAogICAgICAgIGF4aXMudGl0bGUueSA9IGVsZW1lbnRfdGV4dCh2anVzdCA9IDMuMiksCiAgICAgICAgYXhpcy50ZXh0LnkgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDksIGZhbWlseSA9ICJtb25vIiksCiAgICAgICAgdGl0bGUgPSBlbGVtZW50X3RleHQoZmFtaWx5ID0gIm1vbm8iLCBmYWNlID0gImJvbGQiKSwKICAgICAgICBwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC40LCBzaXplID0gMTMpLAogICAgICAgIHBsb3Quc3VidGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjQsIHZqdXN0ID0gMC4wMSwgc2l6ZSA9IDgpLAogICAgICAgIGxlZ2VuZC50ZXh0ID0gZWxlbWVudF90ZXh0KHNpemUgPSA4LCBmYW1pbHkgPSAibW9ubyIsIGZhY2UgPSAiYm9sZCIpKQpgYGAKCgoKClNvLCBoZXJlIEkgaGF2ZSBzaG93biB0aGUgcmVsYXRpdmUgcGVyY2VudGFnZXMgb2YgY29tcGxhaW50IHR5cGVzIGZvciB0aGUgc3VidXJicy4gVGhlIGRhdGEgaGFzIGJlZW4gc2NhbGVkLCBzbyB0aGF0IGEgc3VidXJiIHdpdGggYSBoaWdoZXIgY291bnQgZG9lc24ndCBza2V3IHRoZSBkYXRhLCBhbmQgd2UgY2FuIHNlZSBwcm9wb3J0aW9ucy4KCk9uZSB0aGluZyB0byBub3RlIGhlcmUsIGlzIHRoZSB2YXN0IHZhcmlhdGlvbiBpbiB0b2xlcmFuY2UgZm9yIG5vaXNlLiBNb3N0IGNhdGVnb3JpZXMgYXJlIGNvbnNpc3RlbnQgZXhjZXB0IHRoaXMgb25lLiBDbHVkZW4gZm9yIGV4YW1wbGUgaGFzIGEgc21hbGwgcGVyY2VudGFnZSBvZiBub2lzZSBjb21wbGFpbnRzLCB3aGlsZSBCb2hsZSBQbGFpbnMgaGFzIGEgaHVnZSBwZXJjZW50YWdlLiBUaGlzIHJlcXVpcmVzIG1vcmUgaW52ZXN0aWdhdGlvbiB0byBmaWd1cmUgb3V0IHRoZSByb290IGNhdXNlLiAKCkxvb2tpbmcgYXQgdGhlIHNhbWUgYnV0IGluIGEgZGlmZmVyZW50IHdheSwgd2UgZ2V0OgoKYGBge3IsIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIGVycm9yPUZBTFNFLCBldmFsPVRSVUV9CmFuaW1hbF9jb21wbGFpbnRzICU+JSAKICBncm91cF9ieShzdWJ1cmIpICU+JSAKICBzdW1tYXJpc2UoY291bnQgPSBuKCksIGNvbXBsYWludF90eXBlLCBhbmltYWxfdHlwZSkgJT4lIAogIGZpbHRlcihjb3VudCA8IDUwMCAmIGNvdW50ID4gMTAwKSAlPiUgCiAgZ2dwbG90KGFlcyh4ID0gY29tcGxhaW50X3R5cGUsIHkgPSBjb3VudCwgZmlsbCA9IGNvbXBsYWludF90eXBlKSkgKwogIGdlb21fY29sKHdpZHRoID0gMC44KSArCiAgZmFjZXRfd3JhcCh+IHN1YnVyYikgKwogIGxhYnModGl0bGUgPSAiVG93bnN2aWxsZSBDb21wbGFpbnQgVHlwZXMgYnkgU3VidXJiIC0gRmFjZXRlZCIsCiAgICAgICB4ID0gIiIsCiAgICAgICB5ID0gIk51bWJlciBvZiBDYWxscyIsCiAgICAgICBjb2xvciA9ICJDb21wbGFpbnQgVHlwZSIpICsKICBzY2FsZV9maWxsX2Rpc2NyZXRlKG5hbWUgPSAiQ29tcGxhaW50IFR5cGUiKSArCiAgc2NhbGVfeV9jb250aW51b3VzKGxhYmVscyA9IHNjYWxlczo6Y29tbWEpICsKICB0aGVtZV9lY29ub21pc3QoKSArCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgYXhpcy50aXRsZS55ID0gZWxlbWVudF90ZXh0KHZqdXN0ID0gMy4yKSwKICAgICAgICBheGlzLnRleHQueSA9IGVsZW1lbnRfdGV4dChzaXplID0gOSwgZmFtaWx5ID0gIm1vbm8iKSwKICAgICAgICBheGlzLnRpdGxlLnggPSBlbGVtZW50X3RleHQodmp1c3QgPSAtMSksCiAgICAgICAgdGl0bGUgPSBlbGVtZW50X3RleHQoZmFtaWx5ID0gIm1vbm8iLCBmYWNlID0gImJvbGQiKSwKICAgICAgICBwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC40LCBzaXplID0gMTIpLAogICAgICAgIGxlZ2VuZC50ZXh0ID0gZWxlbWVudF90ZXh0KHNpemUgPSA1LCBmYW1pbHkgPSAibW9ubyIsIGZhY2UgPSAiYm9sZCIpLAogICAgICAgIGxlZ2VuZC50aXRsZSA9IGVsZW1lbnRfdGV4dChzaXplID0gNiksCiAgICAgICAgc3RyaXAudGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gNiwgZmFtaWx5ID0gIm1vbm8iLCBmYWNlID0gImJvbGQiKSkKYGBgCgpUaGlzIGdyYXBoIHNob3dzIHRoZSBzYW1lIHRoaW5nIGFzIGJlZm9yZSBidXQgd2l0aCBjb3VudHMgcmF0aGVyIHRoYW4gcHJvcG9ydGlvbnMuIEl0IGFsbG93cyB1cyB0byBzZWUgdGhpbmdzIGluIGEgZGlmZmVyZW50IHdheS4gRm9yIGV4YW1wbGUsIHdlIGNhbiBzZWUgdGhhdCBIeWRlIFBhcmsgaGFzIGEgZGlzcHJvcG9ydGlvbmF0ZSBhbW91bnQgb2YgcHJpdmF0ZSBpbXBvdW5kcywgd2hpbGUgQm9obGUgcGxhaW5zIGhhcyBtb3JlIG5vaXNlIGNvbXBsYWludHMuIFRoaXMgaXMgY29uc2lzdGVudCB3aXRoIHRoZSBwcmV2aW91cyBncmFwaCB0aGF0IHNob3dlZCB1cyBwcm9wb3J0aW9ucywgc28gd2UgY2FuIGJlIGFzc3VyZWQgdGhhdCBvdXIgYW5hbHlzaXMgaXMgYWNjdXJhdGUKCkxvb2tpbmcgYXQgYW5vdGhlciBzdWJzZXQgb2Ygc3VidXJicywgdGhpcyB0aW1lIHRob3NlIHdpdGggdG90YWwgY2FsbHMgYmV0d2VlbiA1MDAgYW5kIDQwMDAsIHdlIGdldCB0aGlzOgoKYGBge3IsIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIGVycm9yPUZBTFNFLCBldmFsPVRSVUV9CmFuaW1hbF9jb21wbGFpbnRzICU+JSAKICBncm91cF9ieShzdWJ1cmIpICU+JSAKICBzdW1tYXJpc2UoY291bnQgPSBuKCksIGNvbXBsYWludF90eXBlKSAlPiUgCiAgZmlsdGVyKGNvdW50ID49IDUwMCAmIGNvdW50IDw9IDQwMDApICU+JSAKICBnZ3Bsb3QoYWVzKHggPSBzdWJ1cmIsIHkgPSBjb3VudCwgZmlsbCA9IGNvbXBsYWludF90eXBlKSkgKwogIGdlb21fY29sKHBvc2l0aW9uID0gImZpbGwiKSArCiAgY29vcmRfZmxpcCgpICsKICBsYWJzKHRpdGxlID0gIlRvd25zdmlsbGUgQ29tcGxhaW50IFR5cGVzIGJ5IFN1YnVyYiIsCiAgICAgICB4ID0gIlN1YnVyYiIsCiAgICAgICB5ID0gIlByb3BvcnRpb24gb2YgQ29tcGxhaW50IiwKICAgICAgIGNvbG9yID0gIkNvbXBsYWludCBUeXBlIiwKICAgICAgIHN1YnRpdGxlID0gIk5vLiBvZiBDYWxscyA+IDUwMCIpICsKICBzY2FsZV9maWxsX2Rpc2NyZXRlKG5hbWUgPSAiQ29tcGxhaW50IFR5cGUiKSArCiAgdGhlbWVfZWNvbm9taXN0KCkgKwogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KHZqdXN0ID0gMSwgZmFtaWx5ID0gIm1vbm8iLCBmYWNlID0gImJvbGQiLCBzaXplID0gMTApLAogICAgICAgIGF4aXMudGl0bGUueSA9IGVsZW1lbnRfdGV4dCh2anVzdCA9IDMuMiksCiAgICAgICAgYXhpcy50ZXh0LnkgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDksIGZhbWlseSA9ICJtb25vIiksCiAgICAgICAgdGl0bGUgPSBlbGVtZW50X3RleHQoZmFtaWx5ID0gIm1vbm8iLCBmYWNlID0gImJvbGQiLCBzaXplID0gOSksCiAgICAgICAgcGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNCksCiAgICAgICAgcGxvdC5zdWJ0aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNCwgdmp1c3QgPSAwLjAxKSwKICAgICAgICBsZWdlbmQudGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gOCwgZmFtaWx5ID0gIm1vbm8iLCBmYWNlID0gImJvbGQiKSkKYGBgCldoYXQgc3RpY2tzIG91dCB0byBtZSBpbiB0aGVzZSBidXNpZXIgc3VidXJicywgaXMgdGhlIHZhcmlhYmlsaXR5IGluIHByaXZhdGUgaW1wb3VuZHMuIEFpdGtlbnZhbGUsIFRodXJpbmdvd2EgQ2VudHJhbCBhbmQgRG91Z2xhcyBzdGFuZCBvdXQgYXMgYmVpbmcgcHJvcG9ydGlvbmFsbHkgdmVyeSBoaWdoIGluIG51bWJlciBvZiBwcml2YXRlIGltcG91bmRzLiBNb3JlIGludmVzdGlnYXRpb24gaXMgbmVlZGVkIHRvIGZpbmQgb3V0IHRoZSBjYXVzZSBvZiB0aGlzLgoKCk5vdyBsZXQncyBsb29rIGF0IHRoaW5ncyBicm9rZW4gZG93biBieSB0eXBlIG9mIGFuaW1hbCwgcmF0aGVyIHRoYW4gY29tcGxhaW50IHR5cGUuIExvb2tpbmcgYXQgdGhlIG9yaWdpbmFsIHNldCBvZiBzdWJ1cmJzLCB3ZSBnZXQgdGhpczoKCmBgYHtyLCBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCBlcnJvcj1GQUxTRSwgZXZhbD1UUlVFfQphbmltYWxfY29tcGxhaW50cyAlPiUgCiAgZ3JvdXBfYnkoc3VidXJiKSAlPiUgCiAgc3VtbWFyaXNlKGNvdW50ID0gbigpLCBhbmltYWxfdHlwZSkgJT4lIAogIGZpbHRlcihjb3VudCA8IDUwMCAmIGNvdW50ID4gMTAwKSAlPiUgCiAgZ2dwbG90KGFlcyh4ID0gc3VidXJiLCB5ID0gY291bnQsIGZpbGwgPSBhbmltYWxfdHlwZSkpICsKICBnZW9tX2NvbChwb3NpdGlvbiA9ICJmaWxsIikgKwogIGNvb3JkX2ZsaXAoKSArCiAgbGFicyh0aXRsZSA9ICJUb3duc3ZpbGxlIEFuaW1hbCBUeXBlcyBieSBTdWJ1cmIiLAogICAgICAgeCA9ICJTdWJ1cmIiLAogICAgICAgeSA9ICJQcm9wb3J0aW9uIG9mIENhbGxzIiwKICAgICAgIGNvbG9yID0gIkNvbXBsYWludCBUeXBlIikgKwogIHNjYWxlX2ZpbGxfZGlzY3JldGUobmFtZSA9ICJDb21wbGFpbnQgVHlwZSIpICsKICBzY2FsZV95X2NvbnRpbnVvdXMobGFiZWxzID0gc2NhbGVzOjpjb21tYSkgKwogIHRoZW1lX2Vjb25vbWlzdCgpICsKICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICBheGlzLnRpdGxlLnkgPSBlbGVtZW50X3RleHQodmp1c3QgPSAzLjIpLAogICAgICAgIGF4aXMudGV4dC55ID0gZWxlbWVudF90ZXh0KHNpemUgPSA5LCBmYW1pbHkgPSAibW9ubyIpLAogICAgICAgIGF4aXMudGl0bGUueCA9IGVsZW1lbnRfdGV4dCh2anVzdCA9IC0xKSwKICAgICAgICB0aXRsZSA9IGVsZW1lbnRfdGV4dChmYW1pbHkgPSAibW9ubyIsIGZhY2UgPSAiYm9sZCIpLAogICAgICAgIHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjQpLAogICAgICAgIGxlZ2VuZC50ZXh0ID0gZWxlbWVudF90ZXh0KHNpemUgPSA4LCBmYW1pbHkgPSAibW9ubyIsIGZhY2UgPSAiYm9sZCIpLAogICAgICAgIHN0cmlwLnRleHQgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDYsIGZhbWlseSA9ICJtb25vIiwgZmFjZSA9ICJib2xkIikpCmBgYAoKTW9zdCBzdWJ1cmJzIGhhdmUgcHJldHR5IG11Y2ggdGhlIHNhbWUgcmF0aW9zIG9mIGNhdHMgdG8gZG9ncywgZXhjZXB0IGZvciBUb3duc3ZpbGxlIENpdHkuIFRoaXMgaGFzIGNsb3NlIHRvIDUwOjUwIHJhdGlvLCB3aGljaCBpcyB1bnByZWNlZGVudGVkIGZvciB0aGlzIGRhdGEsIGFuZCBub3Qgc2VlbiBpbiBhbnkgb3RoZXIgVG93bnN2aWxsZSBzdWJ1cmIgKEkgY2hlY2tlZCBldmVuIHRoZSBvdGhlciBncm91cHMpLiBUaGlzIGlzIHRoZSBvbmx5IHN1YnVyYiB3aGVyZSB0aGlzIGlzIHRoZSBjYXNlLiBUaGlzIGNvdWxkIHBvdGVudGlhbGx5IGluZGljYXRlIGEgbGFyZ2UgbnVtYmVyIG9mIHN0cmF5IGNhdHMsIGJ1dCBtb3JlIGludmVzdGlnYXRpb24gaXMgbmVlZGVkIHRvIHNlZSB3aHkgdGhpcyBpcyB0aGUgY2FzZS4KCgoK